package com.hj.util;

import com.hj.dao.WorldDocumentDao;
import com.hj.domain.TableFields;
import com.hj.domain.Tables;
import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.rtf.RtfWriter2;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.awt.*;
import java.io.FileOutputStream;
import java.util.List;

/**
 * @author hj
 */
@Component
public class DateToWordDocumentUtil {

    @Resource
    WorldDocumentDao worldDocumentDao;

    /**
     * 数据-->world文档
     *
     * @param tables   表名
     * @param filePath 文件路径
     */
    public void dataToWorldDocument(List<Tables> tables, String filePath) {
        // 创建word文档,并设置纸张的大小
        Document document = new Document(PageSize.A4);
        try {
            // 创建word文档
            RtfWriter2.getInstance(document, new FileOutputStream(filePath));
            document.open();
            Paragraph p = new Paragraph("数据库设计", new Font(Font.NORMAL, 24, Font.BOLDITALIC, new Color(0, 0, 0)));
            p.setAlignment(1);
            document.add(p);
            for (int i = 0; i < tables.size(); i++) {
                String tableName = tables.get(i).getName();
                String tableComment = tables.get(i).getComment();
                List<TableFields> fields = worldDocumentDao.getTable(tables.get(i).getName());
                //表头
                String all = "" + (i + 1) + " 表名:" + tableName + ":" + tableComment;
                //6列
                Table table = new Table(6);
                document.add(new Paragraph(""));
                table.setBorderWidth(1);
                table.setPadding(0);
                table.setSpacing(0);
                table.setWidth(100f);
                table.setWidths(new float[]{1f,4f,2.5f,1.5f,1.5f,8f});
                table.setLocked(true);
                //添加表头的元素，并设置表头背景的颜色
                Color color = new Color(176, 196, 222);
                // 单元格
                Cell cell = new Cell("序号");
                cell.setBackgroundColor(color);
                cell.setHeader(true);
                table.addCell(cell);
                // 单元格
                cell = new Cell("字段名");
                cell.setBackgroundColor(color);
                table.addCell(cell);
                // 单元格
                cell = new Cell("类型");
                cell.setBackgroundColor(color);
                table.addCell(cell);
                // 单元格
                cell = new Cell("是否空");
                cell.setBackgroundColor(color);
                table.addCell(cell);
                // 单元格
                cell = new Cell("主外键");
                cell.setBackgroundColor(color);
                table.addCell(cell);
                // 单元格
                cell = new Cell("字段描述");
                cell.setBackgroundColor(color);
                table.addCell(cell);
                // 表头结束
                table.endHeaders();
                // 表格的主体
                for (int k = 0; k < fields.size(); k++) {
                    String field = fields.get(k).getField();
                    String type = fields.get(k).getType();
                    String isNull = fields.get(k).getNull();
                    String key = fields.get(k).getKey();
                    String comment = fields.get(k).getComment();
                    table.addCell((k + 1) + "");
                    table.addCell(field);
                    table.addCell(type);
                    table.addCell(isNull);
                    table.addCell(key);
                    table.addCell(comment);
                }
                Paragraph paragraph = new Paragraph(all);
                //写入表说明
                document.add(paragraph);
                //生成表格
                document.add(table);
            }
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
